home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / bgroup_alloc.pro < prev    next >
Text File  |  1997-07-08  |  13KB  |  413 lines

  1. ;
  2. ; $Id: bgroup_alloc.pro,v 1.12 1997/04/09 16:29:00 lubos Exp $
  3. ;
  4. ;  WidBGroup
  5. ;   Widget Button Group (CW_BGROUP) class library
  6. ;
  7. ; Copyright (c) 1993-1997, Research Systems, Inc.  All rights reserved.
  8. ;   Unauthorized reproduction prohibited.
  9. ;
  10. ; MODIFICATION HISTORY
  11. ;       Written by:     Joshua Goldstein,       12/93
  12. ;
  13.  
  14.  
  15. ;
  16. ;  BGROUP_Icon
  17. ;       Return the button group icon
  18. ;
  19. FUNCTION BGROUP_Icon
  20.   RETURN, [ $
  21.     [ 0b, 0b, 0b, 0b ], $
  22.     [ 0b, 0b, 0b, 0b ], $
  23.     [ 224b, 0b, 0b, 0b ], $
  24.     [ 176b, 1b, 0b, 0b ], $
  25.     [ 88b, 3b, 0b, 0b ], $
  26.     [ 172b, 6b, 0b, 0b ], $
  27.     [ 86b, 13b, 0b, 0b ], $
  28.     [ 171b, 26b, 0b, 0b ], $
  29.     [ 87b, 29b, 0b, 0b ], $
  30.     [ 175b, 30b, 0b, 0b ], $
  31.     [ 94b, 143b, 255b, 63b ], $
  32.     [ 188b, 135b, 255b, 63b ], $
  33.     [ 248b, 3b, 0b, 0b ], $
  34.     [ 240b, 1b, 0b, 0b ], $
  35.     [ 224b, 0b, 0b, 0b ], $
  36.     [ 0b, 0b, 0b, 0b ], $
  37.     [ 0b, 0b, 0b, 0b ], $
  38.     [ 0b, 0b, 0b, 0b ], $
  39.     [ 0b, 0b, 0b, 0b ], $
  40.     [ 224b, 0b, 0b, 0b ], $
  41.     [ 176b, 1b, 0b, 0b ], $
  42.     [ 88b, 3b, 0b, 0b ], $
  43.     [ 172b, 6b, 0b, 0b ], $
  44.     [ 86b, 13b, 0b, 0b ], $
  45.     [ 171b, 26b, 0b, 0b ], $
  46.     [ 87b, 29b, 0b, 0b ], $
  47.     [ 175b, 30b, 0b, 0b ], $
  48.     [ 94b, 143b, 255b, 63b ], $
  49.     [ 188b, 135b, 255b, 63b ], $
  50.     [ 248b, 3b, 0b, 0b ], $
  51.     [ 240b, 1b, 0b, 0b ], $
  52.     [ 224b, 0b, 0b, 0b ]  $
  53.   ]
  54. END
  55.  
  56.  
  57. ;
  58. ;  BGROUP_Copy
  59. ;       Copy a Button group. 2 copy methods.
  60. ;
  61. ;   if( copy != NULL)       { *copy = *ptr; free(ptr); }
  62. ;   else                    { *(copy = malloc(...)) = *ptr; }
  63. ;
  64. PRO BGROUP_Copy, Ptr, Copy
  65.     GenCopy, Ptr, Copy, /HASVALUE
  66. END
  67.  
  68. ;
  69. ;  BGROUP_Destroy
  70. ;   Release resources for the given button group.
  71. ;
  72. PRO BGROUP_Destroy, Ptr
  73.     GenDestroy, Ptr, /HASVALUE
  74. END
  75.  
  76.  
  77. ;
  78. ;  BGROUP_Event
  79. ;   Event handling routine for Button group dialogs.
  80. ;
  81. PRO BGROUP_Event, Event
  82.  
  83.     WIDGET_CONTROL, Event.Id, GET_UVALUE=Ev                 ; Get Event
  84.     WIDGET_CONTROL, Event.Top, GET_UVALUE=Binfo, /NO_COPY   ; Get Dialog Info
  85.     Ptr2Obj, Binfo.ObjPtr, Obj                              ; Get Object
  86.  
  87.     CASE Ev OF
  88.  
  89.     'Bbs':      BEGIN                               ; Base is a Bulletin Board
  90.         Obj.BaseType        = 0
  91.         WIDGET_CONTROL, Binfo.RowColId, SENSITIVE=0
  92.         END
  93.     'Row':                BEGIN                     ; Base is a row
  94.         Obj.BaseType        = 1
  95.         WIDGET_CONTROL, Binfo.RowColId, SENSITIVE=1
  96.         END
  97.     'Column':        BEGIN                          ; Base is a column
  98.         Obj.BaseType        = 2
  99.         WIDGET_CONTROL, Binfo.RowColId, SENSITIVE=1
  100.         END
  101.  
  102.     'LITERAL':      BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  103.         Obj.ValueType       = 0
  104.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=0
  105.         END
  106.     'CODEBASED':    BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  107.         Obj.ValueType       = 1
  108.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=1
  109.         END
  110.  
  111.     'MAINTEXT': WIDGET_CONTROL, Obj.Value1, SET_UVALUE=Event.Value
  112.  
  113.     'VALUETEXT':Obj.Value2      = Event.Value   ; UNIMPLEMENTED
  114.     'NORMAL':   Obj.BaseExcl    = 0             ; Exclusivity of Group
  115.     'EXCL':     Obj.BaseExcl    = 1
  116.     'NONEXCL':  Obj.BaseExcl    = 2
  117.     'TOP':      Obj.TopTitle    = Event.Value   ; Basic Info Values
  118.     'LEFT':     Obj.LeftTitle   = Event.Value
  119.  
  120.     'NROW':     Obj.NRowCol     = Event.Value   ; Base type Values
  121.     'SPACE':    Obj.Space       = Event.Value
  122.     'XPAD':     Obj.XPad        = Event.Value
  123.     'YPAD':     Obj.YPad        = Event.Value
  124.     'FONT':     Obj.Font        = Event.Value
  125.  
  126.     'NAME':     Obj.Name        = Event.Value   ; Other values
  127.     'FRAME':    Obj.FrameSize   = Event.Value
  128.     'UVALUE':   Obj.Uvalue      = Event.Value
  129.  
  130.     'XSIZE':    Obj.XSize       = Event.Value   ; XY Stuff
  131.     'YSIZE':    Obj.YSize       = Event.Value
  132.     'XOFFSET':  Obj.XOffset     = Event.Value
  133.     'YOFFSET':  Obj.YOffset     = Event.Value
  134.     'XSCROLL':  Obj.XScrollSize = Event.Value
  135.     'YSCROLL':  Obj.YScrollSize = Event.Value
  136.  
  137.     'XFONT':    DoXFont, Obj, Binfo.Foci[6]
  138.     'DONE':     BEGIN
  139.         Accept, Obj, Binfo.ObjPtr
  140.         WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  141.         WIDGET_CONTROL, Event.Top, /DESTROY
  142.         RETURN
  143.         END
  144.  
  145.     'CANCEL':   BEGIN
  146.         Cancel, Obj, Binfo.ObjPtr
  147.         RETURN
  148.         END
  149.     ELSE:           MESSAGE, 'Unprocessed event: ' + Ev
  150.     ENDCASE
  151.  
  152.     Dirty   = 1     ; We've changed something since the last save
  153.  
  154.     SetNextFocus, Binfo, Event      ; Set next keyboard focus as necessary
  155.     Obj2Ptr, Obj, Binfo.ObjPtr      ; Put object back into pointer
  156.     WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  157. END
  158.  
  159.  
  160. ;
  161. ;  BGROUP_Build
  162. ;   Create a dialog box a button group object.  If ptr is nil then
  163. ;   create the object as well.
  164. ;
  165. PRO BGROUP_Build, Ptr, ParPtr
  166.  
  167.   COMMON WidEd_Comm
  168.  
  169.     BGROUP_Alloc, ParPtr, Ptr               ; Allocate object if necessary
  170.     MgrName = 'WE_BGROUP' + STRTRIM(Ptr, 2) ; Create dialog box name
  171.     IF XRegistered(MgrName) THEN RETURN     ; See if it already exists
  172.  
  173.     Title   = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
  174.     Ptr2Obj, Ptr, Obj
  175.  
  176.     ;   Create Dialog
  177.  
  178.     IF SmallScreen[0] NE 0 THEN BEGIN
  179.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg, $
  180.                         X_SCROLL_SIZE=SmallScreen[0], $
  181.                         Y_SCROLL_SIZE=SmallScreen[1] )
  182.     ENDIF ELSE BEGIN
  183.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
  184.     ENDELSE
  185.     Foci    = LONARR(16)
  186.  
  187.     Base1   = WIDGET_BASE(Base, /COLUMN)
  188.     ; Lab       = WIDGET_LABEL(Base1, VALUE="Basic Information")
  189.     BuildEdit, Base1, Obj, _EditId
  190.     BuildBaseType, Base1, Obj, Foci, 0, RowColId, RowColBtns, /ROW
  191.  
  192.     Base2   = WIDGET_BASE(Base1, /ROW)
  193.     Label   = WIDGET_LABEL(Base2, VALUE="Base Type:")
  194.     Base3   = WIDGET_BASE(Base2, /ROW, /EXCLUSIVE)
  195.     Btns    = LONARR(3)
  196.     Btns[0] = WIDGET_BUTTON(Base3, VALUE='Normal Base', UVALUE='NORMAL')
  197.     Btns[1] = WIDGET_BUTTON(Base3, VALUE='Exclusive', UVALUE='EXCL')
  198.     Btns[2] = WIDGET_BUTTON(Base3, VALUE='Non Exclusive', UVALUE='NONEXCL')
  199.  
  200.     Base2   = WIDGET_BASE(Base1, /ROW)
  201.     Foci[4] = Field(Base2, 'Top Title:', Obj.TopTitle, 'TOP', SIZE=20, /STRING)
  202.     Foci[5] = Field(Base2, 'Left Title:', Obj.LeftTitle,'LEFT',SIZE=20,/STRING)
  203.  
  204.     Base2   = WIDGET_BASE(Base1,/ROW)
  205.     Foci[6] = Field(Base2, "Font:", Obj.Font, 'FONT', SIZE=50, /STRING)
  206.     IF !Version.OS NE 'Win32' AND !Version.OS NE 'MacOS' THEN $
  207.         XFontBtn    = WIDGET_BUTTON(Base2, VALUE="XFont", UVALUE="XFONT")
  208.  
  209.     BuildOther, Base1, Obj, Foci, 7
  210.  
  211.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  212.     Lab     = WIDGET_LABEL(Base1, VALUE="Button Group Appearance Controls")
  213.     BuildXY, Base1, Obj, Foci, 10, /SIZE, /OFFSET, /SCROLL
  214.     BuildOkCancel, Base, Obj
  215.  
  216.     DlgInfo     = {             $
  217.         Foci:       Foci,       $
  218.         RowColId:   RowColId,   $
  219.         ObjPtr:     Ptr         $
  220.     }
  221.     Obj.Dialog  = Base
  222.     WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY  ; Save dialog info
  223.     WIDGET_CONTROL, Base, /REALIZE                      ; Create dialog
  224.  
  225.     ;   Set controls in dialog to show current state
  226.     WIDGET_CONTROL, RowColBtns[Obj.BaseType], /SET_BUTTON
  227.     WIDGET_CONTROL, Btns[Obj.BaseExcl], /SET_BUTTON
  228.     WIDGET_CONTROL, RowColId, SENSITIVE=(Obj.BaseType NE 0)
  229.  
  230.     ;   Hand off dialog to window manager
  231.     XMANAGER, MgrName, Base, EVENT_HANDLER='BGROUP_Event', CLEANUP='MISC_Kill'
  232.  
  233.     Obj2Ptr, Obj, Ptr       ; Restore pointer
  234. END
  235.  
  236. ;
  237. ;  BGROUP_Save
  238. ;   Save button group information in a file.
  239. ;   Store value as well: If value is nil, make up a value.
  240. ;
  241. ;   FORMAT:
  242. ;       <bgroup object>
  243. ;       <number of elements in value>
  244. ;       <value>
  245. ;
  246. PRO BGROUP_Save, Unit, Ptr
  247.     GenWrite, Unit, Ptr, DEFAULT="<Nil BGROUP>"
  248. END
  249.  
  250. ;
  251. ;  BGROUP_Restore
  252. ;   Read in a button group object from a file
  253. ;
  254. PRO BGROUP_Restore, Unit, Parent, Ptr
  255.     MISC_Restore, Unit, Parent, Ptr, "BGROUP", 1
  256. END
  257.  
  258. ;
  259. ;  BGROUP_Generate
  260. ;   Create a button group object for previewing
  261. ;
  262. PRO BGROUP_Generate, Base, Ptr
  263.  
  264.   COMMON WidEd_Comm
  265.  
  266.     Ptr2Obj, Ptr, Obj
  267.  
  268.     Id  = 0L            ; Prevent EXECUTE from creating a new variable
  269.  
  270.     GetValue, Obj, Names, "<Nil BGROUP>"        ; Get Value (or use default)
  271.  
  272.     ;   Generate command string
  273.  
  274.     Cmd = 'Id = CW_BGROUP(Base,Names'
  275.     IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
  276.     SAddCmd, Cmd, Obj.Font, 'FONT'
  277.     IAddCmd, Cmd, Obj.XSize, 'XSIZE'
  278.     IAddCmd, Cmd, Obj.YSize, 'YSIZE'
  279.     IAddCmd, Cmd, Obj.XOffset, 'XOFFSET'
  280.     IAddCmd, Cmd, Obj.YOffset, 'YOFFSET'
  281.     IAddCmd, Cmd, Obj.XScrollSize, 'X_SCROLL_SIZE'
  282.     IAddCmd, Cmd, Obj.YScrollSize, 'Y_SCROLL_SIZE'
  283.     SAddCmd, Cmd, Obj.TopTitle, 'LABEL_TOP'
  284.     SAddCmd, Cmd, Obj.LeftTitle, 'LABEL_LEFT'
  285.  
  286.     ;   Row/Column
  287.  
  288.     IF Obj.BaseType EQ 1 THEN               $
  289.         IAddCmd, Cmd, Obj.NRowCol, 'ROW'    $
  290.     ELSE IF Obj.BaseType EQ 2 THEN          $
  291.         IAddCmd, Cmd, Obj.NRowCol, 'COLUMN'
  292.  
  293.     ; Normal/Exclusive/Nonexclusive
  294.  
  295.     IF Obj.BaseExcl NE 0 THEN BEGIN
  296.         IF Obj.BaseExcl EQ 1 THEN       $
  297.             Cmd = Cmd + ',/EXCLUSIVE'       $
  298.         ELSE                    $
  299.             Cmd = Cmd + ',/NONEXCLUSIVE'
  300.     ENDIF ELSE BEGIN
  301.         IAddCmd, Cmd, Obj.Space, 'SPACE'
  302.         IAddCmd, Cmd, Obj.XPad, 'XPAD'
  303.         IAddCmd, Cmd, Obj.YPad, 'YPAD'
  304.     ENDELSE
  305.  
  306.     Obj2Ptr, Obj, Ptr
  307.  
  308.     ; Create bgroup by executing command string we just built
  309.  
  310.     IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
  311.         MESSAGE,'Could not create Button Group ' + VarName(Ptr)
  312.     ENDIF
  313.  
  314. END
  315.  
  316. ;
  317. ;  BGROUP_GenWid
  318. ;   Create IDL code for creating a button group (CW_BGROUP)
  319. ;
  320. PRO BGROUP_GenWid, Unit, Ptr, Parent
  321.  
  322.     Name    = VarId(Ptr)                ; Get variable name of object
  323.     Ptr2Obj, Ptr, Obj                   ; Get object info
  324.     BtnName = 'Btns' + STRTRIM(Ptr,2)   ; Create value name
  325.     SaveStr, Unit, Ptr, Obj, BtnName, "<Nil BGROUP>"    ; create value code.
  326.  
  327.     XPRINTF, FORMAT='("  ",A," = CW_BGROUP( ",A,", ",A)', $
  328.         Unit, Name, Parent, BtnName, /NO_EOL
  329.  
  330.     ;   Row/Column Base?
  331.  
  332.     IF Obj.BaseType EQ 1 THEN           $
  333.         ISaveCmd, Unit, Obj.NRowCol, 'ROW'  $
  334.     ELSE IF Obj.BaseType EQ 2 THEN  $
  335.         ISaveCmd, Unit, Obj.NRowCol, 'COLUMN'
  336.  
  337.     ; Normal/Exclusive/Nonexclusive base?
  338.  
  339.     IF Obj.BaseExcl NE 0 THEN BEGIN
  340.         IF Obj.BaseExcl EQ 1 THEN BEGIN
  341.             ISaveCmd, Unit, 1, "EXCLUSIVE"
  342.         ENDIF ELSE BEGIN
  343.             ISaveCmd, Unit, 1, "NONEXCLUSIVE"
  344.         ENDELSE
  345.     ENDIF ELSE BEGIN
  346.         ISaveCmd, Unit, Obj.Space, 'SPACE'
  347.         ISaveCmd, Unit, Obj.XPad, 'XPAD'
  348.         ISaveCmd, Unit, Obj.YPad, 'YPAD'
  349.     ENDELSE
  350.  
  351.     SSaveCmd, Unit, Obj.Font, "FONT"
  352.     ISaveCmd, Unit, Obj.FrameSize, "FRAME"
  353.     SSaveCmd, Unit, Obj.LeftTitle, "LABEL_LEFT"
  354.     SSaveCmd, Unit, Obj.TopTitle, "LABEL_TOP"
  355.     SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
  356.     ISaveCmd, Unit, Obj.XOffset, "XOFFSET"
  357.     ISaveCmd, Unit, Obj.XSize, "XSIZE"
  358.     ISaveCmd, Unit, Obj.XScrollSize, "X_SCROLL_SIZE"
  359.     ISaveCmd, Unit, Obj.YOffset, "YOFFSET"
  360.     ISaveCmd, Unit, Obj.YSize, "YSIZE"
  361.     ISaveCmd, Unit, Obj.YScrollSize, "Y_SCROLL_SIZE"
  362.     XPRINTF, Unit, ')'
  363.  
  364.     Obj2Ptr, Obj, Ptr
  365. END
  366.  
  367.  
  368. ;
  369. ;  BGROUP_Alloc
  370. ;       Allocate a button group object.  Don't do this if ptr is not NULL
  371. ;
  372. PRO BGROUP_Alloc, Parent, Ptr
  373.   COMMON WidEd_Comm
  374.  
  375.     IF KEYWORD_SET(Ptr) NE 0 THEN RETURN    ; if(ptr != NULL) return;
  376.  
  377.     Ptr     = WIDGET_BASE(GROUP=TopDlg)     ; Make a pointer
  378.     ValueId = WIDGET_BASE(GROUP=TopDlg)     ; Make a pointer for the value too
  379.  
  380.     ;   Make a Button Group object
  381.  
  382.     Obj     = {                 $
  383.         WE_BGROUP,              $
  384.         Type:           'BGROUP',$
  385.         Parent:         Parent, $ ; Pointer to parent
  386.         Id:             NewId(),$ ; Permanent Id
  387.         Dialog:         0L,     $ ; Save Dialog ID (need for Cut consistency)
  388.         Next:           0L,     $ ; next pointer (for lists)
  389.         Name:           '',     $ ; object name
  390.         BaseExcl:       0,      $ ; Enum { Normal, Exclusive, Non-Exclusive }
  391.         BaseType:       1,      $ ; Enum { BBS, Row, Col } (Row is dflt)
  392.         FrameSize:      0,      $
  393.         Font:           '',     $
  394.         NRowCol:        1,      $ ; Number of Rows or Columns
  395.         Space:          0,      $
  396.         TopTitle:       '',     $
  397.         LeftTitle:      '',     $
  398.         UValue:         '',     $
  399.         Value1:         ValueId,$
  400.         Value2:         '',     $ ; UNIMPLEMENTED and unused
  401.         ValueType:      0,      $ ; UNIMPLEMENTED and unused
  402.         XPad:           0,      $
  403.         YPad:           0,      $
  404.         XSize:          0,      $
  405.         YSize:          0,      $
  406.         XOffset:        0,      $
  407.         YOffset:        0,      $
  408.         XScrollSize:    0,      $
  409.         YScrollSize:    0       $
  410.     }
  411.     Obj2Ptr, Obj, Ptr                       ; Store object in pointer
  412. END
  413.